// 加载环境变量
require('dotenv').config(); 

// 定义配置适配器接口
class ConfigAdapter {
  async get(key) {
    throw new Error('get method not implemented');
  }
}

// 适配器实现：从环境变量中读取配置
class EnvConfigAdapter extends ConfigAdapter {
  async get(key) {
    return process.env[key];
  }
}

// 适配器实现：使用内联的默认配置
class DefaultConfigAdapter extends ConfigAdapter {
  constructor() {
    super();
    this.config = {
      DATABASE_PASSWORD: 'defaultPassword',
    };
  }

  async get(key) {
    return this.config[key];
  }
}

// 使用示例
async function getConfigValue(key) {
  let configAdapter;
  
  // 根据你的需求选择使用哪种适配器
  // 例如，这里我们使用环境变量适配器
  if (process.env.USE_ENV_CONFIG) {
    configAdapter = new EnvConfigAdapter();
  } else {
    // 默认情况下，我们使用默认配置适配器
    configAdapter = new DefaultConfigAdapter();
  }
  
  const value = await configAdapter.get(key);
  return value;
}

// 获取配置值的示例
getConfigValue('DATABASE_PASSWORD').then(password => {
  console.log('实现了 Env 和 File ConfigAdapter...');
});

